require('regenerator-runtime');
import { fetch } from '@ray-js/wechat';

// 获取clientid
export const getClientId = () => {
  return fetch({
    action: 'dangerous.getClientId',
  });
};

// 用户临时票据获取
export const reqTicket = () => {
  return fetch({
    action: 'system.userTicket',
  });
};

// 根据uid获取用户信息
export const getUserInfo = (uid) => {
  return fetch({
    action: 'user.infos',
    data: {
    },
  });
};

export const gotoApNetwork = async () => {
  const {
    data: { clientId },
  } = (await getClientId()).result || '';
  const { ticket } = (await reqTicket()) || console.log(getClientId());
  wx.navigateTo({
    url: `plugin://tuya-ap-plugin/step1?clientId=${clientId}&ticket=${ticket}&inne`,
  });
};

export const gotoVirtualNetwork = async () => {
  const {
    data: { clientId },
  } = (await getClientId()).result;
  const { ticket } = await reqTicket();
  wx.navigateTo({
    url: `plugin://tuya-ap-plugin/virtual?clientId=${clientId}&ticket=${ticket}`,
  });
};

/** 小程序与SAAS交互 begin  */
export const API_URL = 'https://www.micerui.com.cn/admin-api'; // 项目域名
// export const token = 'Bearer 25c82420798447eaa3b363d584214e30'; // 项目域名
const title = '加载中'
// /**
//  * 网络请求封装 fetch
//  */
// export const request = (url, params, showLoading = true, method) => {
//   if (showLoading) {
//       wx.showLoading({ title: '加载中' });
//   }
//   var cookie = wx.getStorageSync('cookie');
//   if (!cookie) {
//       cookie = '';
//   }
//   return new Promise((resolve, reject) => {
//       wx.request({
//           url: `${getBaseUrl()}${url}`,
//           data: params || {},
//           method: method || 'post',
//           header: {
//               "Accept": "*/*",
//               "Content-Type": "application/json; charset=UTF-8'",
//               'Authorization': 'Bearer 43eedf881321422bbc274de9f7904f1e'
//           },
//           success: res => {
//               resolve(res.data);
//           },
//           fail: error => {
//               reject(error);
//           },
//           complete() {
//               if (showLoading) {
//                   wx.hideLoading();
//               }
//           }
//       })
//   })
// }

// 查询场景详情
export const getHotel = async (id) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/hotel/page?pageSize=-1&hotelCode=${id}`,
      method: 'GET', // 可选，默认为 GET
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

// 查询位置详情
export const getRoom = async (id) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/hotel/room/passRoom/searchRoomsByHotalCode`,
      method: 'POST', // 可选，默认为 GET
      data: { hotelCode: id }, // 可选
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        console.log('查询位置详情err:',err)
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}


// 位置绑定接口
export const bindTuyaRoom = async ({hotelCode,spaceNo,homeId}) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/hotel/room/passRoom/bindTuyaRoom`,
      method: 'POST', // 可选，默认为 GET
      data: {
        hotelCode, //场景编码
        spaceNo, //位置编码
        homeId  //涂鸦家庭号 
      },
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        console.log('位置绑定接口err:',err)
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

// 点击施工完成按钮
export const finshBuild = async ({hotelCode,spaceNo,buildName,buildPhone,wxUid}) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/hotel/room/passRoom/finshBuild`,
      method: 'POST', // 可选，默认为 GET
      data: {
        hotelCode, //场景编码
        spaceNo, //位置编码
        buildName,
        buildPhone,
        wxUid
      },
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

// 下发设备指令
export const sendDeviceCommand = async ({device_id,dps}) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/devices/sendCommand/${device_id}`,
      method: 'POST', // 可选，默认为 GET
      data:dps,
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

// 获取设备信息
export const getDeviceDetailPage = async ({device_id}) => {
  wx.showLoading({ title  });
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${getBaseUrl()}/devices/getDeviceDetailPage/${device_id}`,
      method: 'get', // 可选，默认为 GET
      header: {
        'content-type': 'application/json', // 默认值
        'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data);
      },
      fail: err => {
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

/** 小程序与SAAS交互 end  */


/** 小程序内交互 begin */
/**
 * 添加家庭(场景)
 * 参数名	类型	说明	必填
    name	String	家庭名字	是
    geo_name	String	家庭地理位置	否
    lon	Double	经度	否
    lat	Double	纬度	否
 */
export const addHome = ({ uid, name, geo_name, lat, lon }) => {
  return fetch({
    action: 'home.add',
    data: {
      uid,
      home: { geo_name, name, lat, lon },
    },
  });
};

/**
 * 添加位置
 * 根据家庭 ID 添加位置。
 * @param {*} param0 
 * 参数名	类型	说明	必填
   home_id	Long	家庭 ID	是
   name	String	位置名称	是
 */
export const addRoom = ({ home_id, name }) => {
  return fetch({
    action: 'home.addRoom',
    data: {
      home_id,
      name,
    },
  });
};

/**
 * 查询家庭下的设备详情
 * 根据家庭 ID 查询家庭下的设备详情。
 * 参数名	类型	说明	必填
   home_id	Long	家庭 ID	是
 */
export const devicesByFamily = ({ home_id }) => {
  return fetch({
    action: 'home.devices',
    data: {
      home_id,
    },
  });
};

/**
 * 查询家庭位置下的所有设备
 * 根据家庭 ID 和位置 ID 查询位置⾥的设备详情信息
 * 参数名	类型	说明	必填
  home_id	Long	家庭 ID	是
  room_id	Long	位置 ID	是
 */
export const devicesByRooms = ({ home_id,room_id }) => {
  return fetch({
    action: 'home.roomDevices',
    data: {
      home_id,
      room_id
    },
  });
};

export const memberHomeList = () => {
  return fetch({
    action: 'home.memberHomeList',
    data: {
    },
  });
};

export const deleteHome = (home_id) => {
  return fetch({
    action: 'home.delete',
    data: {
      home_id
    },
  });
};


// 上报日志
export const log = async (title,requestParams,requestUrl) => {
  return new Promise((resolve, reject) => {
    try {
      wx.request({
        url: `${getBaseUrl()}/infra/api-error-log/createApiErrorLog`,
        method: 'POST', // 可选，默认为 GET
        data:{
            "applicationName":"微信小程序",
            "exceptionName":title,
            requestParams,
            requestUrl
        },
        header: {
          'content-type': 'application/json', // 默认值
          'Authorization': getAccessToken(),
          "tenant-id": getTenantConfigId()
        },
        success: res => {
          resolve(res.data.data);
        },
        fail: err => {
          console.log('err:',err)
          reject(err)
        },
        complete(err) {
          wx.hideLoading();
          reject(err)
        }
      })
    } catch (error) {
      console.log('catch')
      reject(error)
    }
    
  })
}

// saas登录
export const login = async (data) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${API_URL}/system/auth/login`,
      method: 'post', // 可选，默认为 GET
      data,
      header: {
        // 'content-type': 'application/json', // 默认值
        // 'Authorization': getAccessToken(),
        "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data);
      },
      fail: err => {
        console.log('err:',err)
        reject(err)
      },
      complete() {
        wx.hideLoading();
      }
    })
  })
}

// 根据租户名称获取租户信息
export const getAccessByCompany = async (companyName) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${API_URL}/system/auth/getAccessByCompany?companyName=${companyName}`,
      method: 'GET', // 可选，默认为 GET
      header: {
        // 'content-type': 'application/json', // 默认值
        // 'Authorization': getAccessToken(),
        // "tenant-id": getTenantConfigId()
      },
      success: res => {
        resolve(res.data.data);
      },
      fail: err => {
        console.log('err111:',err)
        reject(err)
      },
      complete(err) {
        console.log('err111:',err)
        wx.hideLoading();
      }
    })
  })
}


const getAccessToken = () => {
  const userInfo = wx.getStorageSync('userInfo')
  return `Bearer ${userInfo.accessToken}`
}

const getTenantConfigId = () => {
  const tenantInfo = wx.getStorageSync('tenantInfo')
  return tenantInfo.id
}


const getBaseUrl = () => {
  // const tenantInfo = wx.getStorageSync('tenantInfo')
  // if(!tenantInfo.jsonContent){
  //   return
  // }
  // const json = JSON.parse(tenantInfo.jsonContent)
  return `https://www.micerui.com.cn/admin-api`
}